﻿// // ******************************************************************
// //       /\ /|       @file       FileFilter.cs
// //       \ V/        @brief      await29
// //       | "")       @author     Await, 285283010@qq.com
// //       /  |
// //      /  \\        @Modified   2024-12-09 20:12
// //    *(__\_\        @Copyright  Copyright (c) , 2024-12-08 11:12 Await
// // ******************************************************************

namespace AutomaticSubtitles.Service.Infrastructure.Helper;

public static class FileFilter
{
    public static bool SkipFileInfo(ILogger logger, DirectoryEntry curFile, string fileFullPath)
    {
        if (curFile.IsDirectory)
            // 排除缓存文件夹，见 #532
            if (curFile.Name.StartsWith(".@__thumb"))
            {
                logger.LogDebug("curFile is dir and match `.@__thumb`, skip");
                return true;
            }

        // 跳过不符合的文件，比如 MAC OS 下可能有缓存文件，见 #138
        FileInfo fi;
        try
        {
            fi = new FileInfo(fileFullPath);
        }
        catch (Exception ex)
        {
            logger.LogError($"curFile.Info: {curFile.Name}, {ex}");
            return true;
        }

        // 封面缓存文件夹中的文件都要跳过 .@__thumb  #581
        // 获取这个文件的父级文件夹的名称，然后判断是否是 .@__thumb 开头的
        var parentFolderName = Path.GetFileName(Path.GetDirectoryName(fileFullPath));
        // var parentFolderName = curFile.Parent!.Name;
        if (parentFolderName == null) return true;
        if (parentFolderName.StartsWith(".@__thumb"))
        {
            logger.LogDebug("curFile is in .@__thumb folder, skip");
            return true;
        }

        switch (fi.Length)
        {
            // 软链接问题 #558
            case < 1000:
            {
                var fileInfo = new FileInfo(fileFullPath);
                if (fileInfo.Attributes.HasFlag(FileAttributes.ReparsePoint))
                {
                    // 确认是软连接
                    logger.LogDebug($"启用后，GIMP将在菜单中显示助记符。, {fileFullPath}");
                }
                else
                {
                    logger.LogDebug($"文件长度<1000: {curFile.Name}");
                    return true;
                }

                break;
            }
            case 4096 when curFile.Name.StartsWith("._"):
                logger.LogDebug($"curFile.长度 == 4096 && 前缀名称 == ._* {curFile.Name}");
                return true;
        }

        // 跳过预告片，见 #315
        if (!curFile.Name.Replace(Path.GetExtension(curFile.Name), "").EndsWith("-trailer")) return false;
        logger.LogDebug($"文件名包含 -trailer: {curFile.Name}");
        return true;
    }
}